package cl.coopeuch.financiamientoproductos.presentacion.logger;

import java.io.IOException;
import java.net.URL;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;


/**
 * carga la configuracion de Log4j
 *
 * @author faviles
 *
 */
public class ConfigLauncher extends HttpServlet {
	
	private static final long serialVersionUID = -3356622524245458075L;
	private static String WEBXML_PARAMS_LOG4J = "log4j-config-file";
	
	Logger logger = Logger.getLogger(this.getClass());

	public ConfigLauncher() {
	}

	
	/**
	 * Carga la configuracion de Log4j
	 * @param archivoProperties
	 */
	private void configureLog4j(String archivoProperties) {
		try {
			if (!archivoProperties.startsWith("/")) {
				ClassLoader loader = Thread.currentThread().getContextClassLoader();
				URL url = loader.getResource(archivoProperties);
				DOMConfigurator.configure(url);
			} else {
				DOMConfigurator.configure(archivoProperties);
			}
		} catch (Exception exception) {
			logger.error("Ha ocurrido un error, metodo configureLog4j", exception);
			return;
		}
	}

	@Override
	/**
	 * Inicializa el archivo webapp-config-file
	 * @param servletConfig
	 */
	public void init(ServletConfig servletConfig) throws ServletException {
		String archivoPropertiesLog4j = servletConfig.getInitParameter(WEBXML_PARAMS_LOG4J);
		this.configureLog4j(archivoPropertiesLog4j);
	}

	
	@Override
	/**
	 * Inicializa el archivo webapp-config-file
	 * @param request
	 * @param response
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String archivoPropertiesLog4j = request.getSession().getServletContext().getInitParameter(WEBXML_PARAMS_LOG4J);
		this.configureLog4j(archivoPropertiesLog4j);
	}

	/**
	 * Destruye
	 */
	public void destroy() {
		super.destroy();
	}
}
